Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/ui/voice.py 1.6.1 (0a7a5743) Text, 20.90 KB

Tff7b72import T7ee787time
Tff7b72import T7ee787RNS

Tff7b72from T7ee787typing Tff7b72import Te6edf3Union
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dpTb4b4b4,Te6edf3sp
Tff7b72from T7ee787kivyT7ee787.T7ee787langT7ee787.T7ee787builder Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787clipboard Tff7b72import Te6edf3Clipboard
Tff7b72from T7ee787kivyT7ee787.T7ee787utils Tff7b72import Te6edf3escape_markup
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787recycleview Tff7b72import Te6edf3MDRecycleView
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787list Tff7b72import Te6edf3OneLineIconListItem
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787pickers Tff7b72import Te6edf3MDColorPicker
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRectangleFlatButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRectangleFlatIconButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787dialog Tff7b72import Te6edf3MDDialog
Tff7b72from T7ee787kivymdT7ee787.T7ee787icon_definitions Tff7b72import Te6edf3md_icons
Tff7b72from T7ee787kivymdT7ee787.T7ee787toast Tff7b72import Te6edf3toast
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3StringPropertyTb4b4b4, Te6edf3BooleanProperty
Tff7b72from T7ee787kivyT7ee787.T7ee787effectsT7ee787.T7ee787scroll Tff7b72import Te6edf3ScrollEffect
Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787sidebandT7ee787.T7ee787sense Tff7b72import Te6edf3Telemeter
Tff7b72import T7ee787threading
Tff7b72from T7ee787datetime Tff7b72import Te6edf3datetime

Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3ts_format
Tff7b72from T7ee787androidT7ee787.T7ee787permissions Tff7b72import Te6edf3request_permissionsTb4b4b4, Te6edf3check_permission
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787.T7ee787helpers Tff7b72import Te6edf3ts_format

Tff7b72class T56d364VoiceTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffscreen Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsettings_screen Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffdial_target Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffui_updater Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpath_requesting Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffoutput_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffinput_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflisted_output_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflisted_input_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflisted_ringer_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffhas_screenTb4b4b4(Ta5d6ff"Ta5d6ffvoice_screenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffscreen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3layout_voice_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffapp Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffscreenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect

Tff7b72def Td2a8ffupdate_call_statusTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dtTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffvoice_screenTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffui_updater Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72selfTff7b72.Td2a8ffui_updater Tff7b72= Te6edf3ClockTff7b72.Td2a8ffschedule_intervalTb4b4b4(Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4, T79c0ff0.5Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffui_updaterTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffui_updaterTff7b72.Td2a8ffcancelTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffui_updater Tff7b72= Tff7b72None

Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffdial_button
Te6edf3ih Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffidentity_hash
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Te6edf3telephone Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephone
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpath_requestingTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_availableTb4b4b4:
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftarget_input_actionTb4b4b4(Te6edf3ihTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_in_call Tff7b72or Te6edf3telephoneTff7b72.Td2a8ffcall_is_connectingTb4b4b4:
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffHang upTa5d6ff"
Te6edf3dbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-hangupTa5d6ff"

Tff7b72elif Te6edf3telephoneTff7b72.Td2a8ffis_ringingTb4b4b4:
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffAnswerTa5d6ff"
Te6edf3dbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-ringTa5d6ff"
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffcallerTb4b4b4: Te6edf3ihTff7b72.Td2a8fftext Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3telephoneTff7b72.Td2a8ffcallerTff7b72.Td2a8ffhashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72TrueTb4b4b4; Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffVoice calls disabledTa5d6ff"
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Tff7b72def Td2a8fftarget_validTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffdial_button
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72FalseTb4b4b4; Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffCallTa5d6ff"
Te6edf3dbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-outgoingTa5d6ff"

Tff7b72def Td2a8fftarget_invalidTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffdial_button
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72TrueTb4b4b4; Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffCallTa5d6ff"
Te6edf3dbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-outgoingTa5d6ff"

Tff7b72def Td2a8fftarget_input_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3senderTb4b4b4:
Te6edf3target_hash Tff7b72= Te6edf3senderTff7b72.Td2a8fftext
Tff7b72if Tffa657lenTb4b4b4(Te6edf3target_hashTb4b4b4) Tff7b72== Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3identity_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3target_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdial_target Tff7b72= Te6edf3identity_hash
Tff7b72selfTff7b72.Td2a8fftarget_validTb4b4b4(Tb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72selfTff7b72.Td2a8fftarget_invalidTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8fftarget_invalidTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffrequest_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffpath_requestingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_busyTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffRequesting path...Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffdial_buttonTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpath_requesting Tff7b72= Te6edf3destination_hash
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff_path_wait_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffWaiting for path request answer...Ta5d6ff"Tb4b4b4)

Tff7b72def Td2a8ff_path_wait_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3timeout Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffPATH_TIME
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpath_requestingTb4b4b4) Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3timeoutTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.25Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_busyTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpath_requestingTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCalling Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)Tffd700}Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffdialTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4, T79c0ff0.1Tb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_path_request_failedTb4b4b4, T79c0ff0.05Tb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4, T79c0ff0.1Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffpath_requesting Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ff_path_request_failedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dtTb4b4b4)Tb4b4b4:
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffPath request timed outTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffdial_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_availableTb4b4b4:

Te6edf3destination_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffhash_from_name_and_identityTb4b4b4(Ta5d6ff"Ta5d6fflxst.telephonyTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCalling Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)Tffd700}Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffdialTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)

Tff7b72elif Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_in_call Tff7b72or Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffcall_is_connectingTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffHanging upTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffhangupTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)

Tff7b72elif Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_ringingTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAnsweringTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffanswerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)


T8b949e### settings screen
T8b949e######################################

Tff7b72def Td2a8ffsettings_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffhas_screenTb4b4b4(Ta5d6ff"Ta5d6ffvoice_settings_screenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3layout_voice_settings_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffapp Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffvoice_settings_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_settings_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_settings_screenTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdate_devicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787LXST
Tff7b72selfTff7b72.Td2a8ffoutput_devices Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4; Tff7b72selfTff7b72.Td2a8ffinput_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3device Tff7b72in Te6edf3LXSTTff7b72.Td2a8ffSourcesTff7b72.Td2a8ffBackendTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffall_speakersTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72for Te6edf3device Tff7b72in Te6edf3LXSTTff7b72.Td2a8ffSinksTff7b72.Td2a8ffBackendTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffall_microphonesTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72in Tff7b72selfTff7b72.Td2a8ffoutput_devicesTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72in Tff7b72selfTff7b72.Td2a8ffinput_devicesTb4b4b4: Tff7b72selfTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72in Tff7b72selfTff7b72.Td2a8ffoutput_devicesTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffupdate_settings_screenTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_trusted_onlyTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_trusted_onlyTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_trusted_onlyTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Tff7b72selfTff7b72.Td2a8ffsettings_save_actionTb4b4b4)

Te6edf3bp Tff7b72= T79c0ff6Tb4b4b4; Te6edf3ml Tff7b72= T79c0ff45Tb4b4b4; Te6edf3fs Tff7b72= T79c0ff16Tb4b4b4; Te6edf3ics Tff7b72= T79c0ff14
Tff7b72selfTff7b72.Td2a8ffupdate_devicesTb4b4b4(Tb4b4b4)

T8b949e# Output devices
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_output_devicesTb4b4b4:
Te6edf3default_output_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffSystem DefaultTa5d6ff"Tb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffoutput_device_actionTb4b4b4)
Te6edf3default_output_buttonTff7b72.Td2a8ffdevice Tff7b72= Tff7b72NoneTb4b4b4; Te6edf3default_output_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3default_output_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3default_output_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_output_devicesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff"Tb4b4b4)

Tff7b72for Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8ffoutput_devicesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_output_devicesTb4b4b4:
Te6edf3label Tff7b72= Te6edf3device Tff7b72if Tffa657lenTb4b4b4(Te6edf3deviceTb4b4b4) Tff7b72< Te6edf3ml Tff7b72else Te6edf3deviceTb4b4b4[Tb4b4b4:Te6edf3mlTff7b72-T79c0ff3Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff...Ta5d6ff"
Te6edf3device_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Te6edf3labelTb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffoutput_device_actionTb4b4b4)
Te6edf3device_buttonTff7b72.Td2a8ffpadding Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4]Tb4b4b4; Te6edf3device_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3deviceTb4b4b4: Te6edf3device_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Te6edf3device_buttonTff7b72.Td2a8ffdevice Tff7b72= Te6edf3device
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3device_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_output_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTb4b4b4)

T8b949e# Input devices
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_input_devicesTb4b4b4:
Te6edf3default_input_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffSystem DefaultTa5d6ff"Tb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffinput_device_actionTb4b4b4)
Te6edf3default_input_buttonTff7b72.Td2a8ffdevice Tff7b72= Tff7b72NoneTb4b4b4; Te6edf3default_input_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3default_input_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3default_input_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_input_devicesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff"Tb4b4b4)

Tff7b72for Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8ffinput_devicesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_input_devicesTb4b4b4:
Te6edf3label Tff7b72= Te6edf3device Tff7b72if Tffa657lenTb4b4b4(Te6edf3deviceTb4b4b4) Tff7b72< Te6edf3ml Tff7b72else Te6edf3deviceTb4b4b4[Tb4b4b4:Te6edf3mlTff7b72-T79c0ff3Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff...Ta5d6ff"
Te6edf3device_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Te6edf3labelTb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffinput_device_actionTb4b4b4)
Te6edf3device_buttonTff7b72.Td2a8ffpadding Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4]Tb4b4b4; Te6edf3device_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3deviceTb4b4b4: Te6edf3device_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Te6edf3device_buttonTff7b72.Td2a8ffdevice Tff7b72= Te6edf3device
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3device_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_input_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTb4b4b4)

T8b949e# Ringer devices
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_ringer_devicesTb4b4b4:
Te6edf3default_ringer_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffSystem DefaultTa5d6ff"Tb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffringer_device_actionTb4b4b4)
Te6edf3default_ringer_buttonTff7b72.Td2a8ffdevice Tff7b72= Tff7b72NoneTb4b4b4; Te6edf3default_ringer_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3default_ringer_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffringer_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3default_ringer_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_ringer_devicesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff"Tb4b4b4)

Tff7b72for Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8ffoutput_devicesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_ringer_devicesTb4b4b4:
Te6edf3label Tff7b72= Te6edf3device Tff7b72if Tffa657lenTb4b4b4(Te6edf3deviceTb4b4b4) Tff7b72< Te6edf3ml Tff7b72else Te6edf3deviceTb4b4b4[Tb4b4b4:Te6edf3mlTff7b72-T79c0ff3Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff...Ta5d6ff"
Te6edf3device_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Te6edf3labelTb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffringer_device_actionTb4b4b4)
Te6edf3device_buttonTff7b72.Td2a8ffpadding Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4]Tb4b4b4; Te6edf3device_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3deviceTb4b4b4: Te6edf3device_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Te6edf3device_buttonTff7b72.Td2a8ffdevice Tff7b72= Te6edf3device
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffringer_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3device_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_ringer_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTb4b4b4)

Tff7b72def Td2a8ffsettings_save_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_trusted_onlyTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffoutput_device_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3senderTff7b72.Td2a8ffdevice
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3w Tff7b72in Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffchildrenTb4b4b4: Te6edf3wTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3senderTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_speakerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffinput_device_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3senderTff7b72.Td2a8ffdevice
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3w Tff7b72in Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffchildrenTb4b4b4: Te6edf3wTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3senderTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_microphoneTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffringer_device_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3senderTff7b72.Td2a8ffdevice
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3w Tff7b72in Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffringer_devicesTff7b72.Td2a8ffchildrenTb4b4b4: Te6edf3wTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3senderTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_ringerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4]Tb4b4b4)


Te6edf3layout_voice_screen Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:
Ta5d6ff name: Ta5d6ff"Ta5d6ffvoice_screenTa5d6ff"
Ta5d6ff
Ta5d6ff BoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"

Ta5d6ff MDTopAppBar:
Ta5d6ff title: Ta5d6ff"Ta5d6ffVoiceTa5d6ff"
Ta5d6ff anchor_title: Ta5d6ff"Ta5d6ffleftTa5d6ff"
Ta5d6ff elevation: 0
Ta5d6ff left_action_items:
Ta5d6ff [[Ta5d6ff'Ta5d6ffmenuTa5d6ff'Ta5d6ff, lambda x: root.app.nav_drawer.set_state(Ta5d6ff"Ta5d6ffopenTa5d6ff"Ta5d6ff)]]
Ta5d6ff right_action_items:
Ta5d6ff [
Ta5d6ff [Ta5d6ff'Ta5d6ffwrench-cogTa5d6ff'Ta5d6ff, lambda x: root.delegate.settings_action(self)],
Ta5d6ff [Ta5d6ff'Ta5d6ffcloseTa5d6ff'Ta5d6ff, lambda x: root.app.close_any_action(self)],
Ta5d6ff ]

Ta5d6ff ScrollView:
Ta5d6ff id: voice_scrollview

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(28), dp(32), dp(28), dp(16)]

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff # spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(12), dp(0), dp(0)]

Ta5d6ff MDTextField:
Ta5d6ff id: identity_hash
Ta5d6ff hint_text: Ta5d6ff"Ta5d6ffIdentity hashTa5d6ff"
Ta5d6ff mode: Ta5d6ff"Ta5d6ffrectangleTa5d6ff"
Ta5d6ff # size_hint: [1.0, None]
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_xTa5d6ff"Ta5d6ff: .5}
Ta5d6ff max_text_length: 32
Ta5d6ff on_text: root.delegate.target_input_action(self)

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(35), dp(0), dp(35)]

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: dial_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffphone-outgoingTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffCallTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.dial_action(self)
Ta5d6ff disabled: True
Ta5d6ff"""

Te6edf3layout_voice_settings_screen Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:
Ta5d6ff name: Ta5d6ff"Ta5d6ffvoice_settings_screenTa5d6ff"
Ta5d6ff
Ta5d6ff BoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"

Ta5d6ff MDTopAppBar:
Ta5d6ff id: top_bar
Ta5d6ff title: Ta5d6ff"Ta5d6ffVoice ConfigurationTa5d6ff"
Ta5d6ff anchor_title: Ta5d6ff"Ta5d6ffleftTa5d6ff"
Ta5d6ff elevation: 0
Ta5d6ff left_action_items:
Ta5d6ff [[Ta5d6ff'Ta5d6ffmenuTa5d6ff'Ta5d6ff, lambda x: root.app.nav_drawer.set_state(Ta5d6ff"Ta5d6ffopenTa5d6ff"Ta5d6ff)]]
Ta5d6ff right_action_items:
Ta5d6ff [
Ta5d6ff [Ta5d6ff'Ta5d6ffcloseTa5d6ff'Ta5d6ff, lambda x: root.app.close_sub_voice_action(self)],
Ta5d6ff ]

Ta5d6ff MDScrollView:
Ta5d6ff id: voice_settings_scrollview
Ta5d6ff size_hint_x: 1
Ta5d6ff size_hint_y: None
Ta5d6ff size: [root.width, root.height-root.ids.top_bar.height]
Ta5d6ff do_scroll_x: False
Ta5d6ff do_scroll_y: True

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(28), dp(48), dp(28), dp(16)]

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffCall HandlingTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff height: self.texture_size[1]
Ta5d6ff padding: [dp(0), dp(0), dp(0), dp(12)]

Ta5d6ff MDLabel:
Ta5d6ff id: voice_settings_info
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ffYou can block calls from all other callers than contacts marked as trusted, by enabling the following option.Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff padding: [dp(0), dp(16), dp(0), dp(16)]

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffBlock non-trusted callersTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"

Ta5d6ff MDSwitch:
Ta5d6ff id: voice_trusted_only
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffAudio DevicesTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff padding: [dp(0), dp(96), dp(0), dp(12)]

Ta5d6ff MDLabel:
Ta5d6ff id: voice_settings_info
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ffYou can configure which audio devices Sideband will use for voice calls, by selecting either the system default device, or specific audio devices available.Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff padding: [dp(0), dp(64), dp(0), dp(32)]

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ff[b]Output[/b]Ta5d6ff"
Ta5d6ff font_size: dp(18)
Ta5d6ff markup: True

Ta5d6ff MDBoxLayout:
Ta5d6ff id: output_devices
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff12dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(24), dp(0), dp(48)]

Ta5d6ff # MDRectangleFlatIconButton:
Ta5d6ff # id: output_default_button
Ta5d6ff # text: Ta5d6ff"Ta5d6ffSystem DefaultTa5d6ff"
Ta5d6ff # padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff # icon_size: dp(24)
Ta5d6ff # font_size: dp(16)
Ta5d6ff # size_hint: [1.0, None]
Ta5d6ff # on_release: root.delegate.output_device_action(self)
Ta5d6ff # disabled: False

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ff[b]Input[/b]Ta5d6ff"
Ta5d6ff font_size: dp(18)
Ta5d6ff markup: True

Ta5d6ff MDBoxLayout:
Ta5d6ff id: input_devices
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff12dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(24), dp(0), dp(48)]

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ff[b]Ringer[/b]Ta5d6ff"
Ta5d6ff font_size: dp(18)
Ta5d6ff markup: True

Ta5d6ff MDBoxLayout:
Ta5d6ff id: ringer_devices
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff12dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(24), dp(0), dp(48)]

Ta5d6ff"""


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────